{
  Модуль хранения и управления данными проекта

 TGeneralDataItem - любой элемент данных
  diID      : идентификатор
  diName    : название
  diOwner   : выше по иерархии
  diType    : тип
  diState   : состояние готовности
  diStatus  : статус проверки
  diSource  : источник данных
  diMdfctn  : номер ревизии
  diMdfDate : дата изменения
  diChngHist: история изменений

   версия 0.2 март 2011 prodg@ya.ru D.Kondakov
}
unit DataMngrSystm;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, IIntgrlTypes, IIntgrlBaseDefs, IIntgrlBaseCnfg, IIntgrlDBPlgn, IIntgrlObjcts, DataObjcts;

{$i calcconfig.inc}

type

  { TProjectDB }

  TProjectDB = class(TinlModule)
    constructor Create(wCfg: TinlConfiguration);
    destructor Destroy; override;
    procedure GetDefParams(DefParams: TStrings); override;
    function CheckParams: TinlLogicType; override;
    procedure AddDefParams(Params: TStringList); override;
    procedure ResetParams; override;
    procedure ProceedSignal(snlMsg: TinlStringType); override;
  protected
    function GetUnitVersion: TinlModifctn; override;
    procedure DataInit; override;
    procedure DataDone; override;
    function GetModuleType: TModuleType; override;
  private
    FDriverDB: TinlDBDriver;
    FProjectSource: TextLongNameType;
    FOpenDB: TinlLogicType;
    procedure CreateProjectDB;
    procedure OpenProjectDB;
    procedure CloseProjectDB;
    procedure SetProjectSource(const AValue: TextLongNameType);
  public
    property ProjectSource: TextLongNameType read FProjectSource write SetProjectSource;

    // Специфичные функции
    procedure InitNewProjectDB;
    function RegInfo(iInfo: TIntgrlElmntInfo): TinlID;
    function GetInfo(infoID: TinlID): TIntgrlElmntInfo;
    function InfoByAlias(iAlias: TinlNameType; var Info: TIntgrlElmntInfo): TinlID;
    function CreateData(infoID: TinlID; dataName: TinlNameType): TinlID;
    function GetData(dataID: TinlID): TIntgrlElmntData;
    function DataByName(dName: TinlNameType; var Data: TIntgrlElmntData): TinlID;
  end;

const
  DBmodVer = 1000001;

implementation

{ TProjectDB }

constructor TProjectDB.Create(wCfg: TinlConfiguration);
begin
  inherited Create(wCfg);
  FDriverDB := nil;
  FProjectSource := '';
  FOpenDB := false;
end;

destructor TProjectDB.Destroy;
begin
  CloseProjectDB;
  inherited;
end;

procedure TProjectDB.GetDefParams(DefParams: TStrings);
begin
  DefParams.Append('DB_CHECK_CHAGES=Следить за изменениями данных');
end;

function TProjectDB.CheckParams: TinlLogicType;
begin
  Result := true;
end;

procedure TProjectDB.AddDefParams(Params: TStringList);
begin
//  inherited AddDefParams(Params);
end;

procedure TProjectDB.ResetParams;
begin
//  inherited ResetParams;
end;

procedure TProjectDB.ProceedSignal(snlMsg: TinlStringType);
begin
//  inherited ProceedSignal(snlMsg);
end;

function TProjectDB.GetUnitVersion: TinlModifctn;
begin
  Result := DBmodVer;
end;

procedure TProjectDB.DataInit;
begin
  //  inherited DataInit;
end;

procedure TProjectDB.DataDone;
begin
//  inherited DataDone;
end;

function TProjectDB.GetModuleType: TModuleType;
begin
  Result := mDB;
end;

procedure TProjectDB.CreateProjectDB;
begin
  CloseProjectDB;

  FOpenDB := true;
end;

procedure TProjectDB.OpenProjectDB;
var
  DBtype: TStorageType;
begin
  CloseProjectDB;
  // Определяем необходимый тип драйвера
  DBtype := sSQLite;
  // FDriverDB InitDBDriver
  case DBtype of
  sSQLite: FDriverDB := TSQLite3DBDriver.Create(FProjectSource);
  sSQServer: FDriverDB := TMyDBDriver.Create(FProjectSource);
  sFSFlat: FDriverDB := TFSflatDBDriver.Create(FProjectSource);
  end;
  regChild(FDriverDB);

  FOpenDB := true;
end;

procedure TProjectDB.CloseProjectDB;
begin
  if not FOpenDB then exit;
  sndSignal(msgALL,'DB close');
  FDriverDB.CloseBase;
  FOpenDB := false;
end;

procedure TProjectDB.SetProjectSource(const AValue: TextLongNameType);
begin
  if FProjectSource = AValue then exit;
  CloseProjectDB;
  FProjectSource := AValue;
  OpenProjectDB;
end;

procedure TProjectDB.InitNewProjectDB;
begin
  // Создать таблицу объектов
  // Создать таблицу связей
end;

function TProjectDB.RegInfo(iInfo: TIntgrlElmntInfo): TinlID;
begin

end;

function TProjectDB.GetInfo(infoID: TinlID): TIntgrlElmntInfo;
begin

end;

function TProjectDB.InfoByAlias(iAlias: TinlNameType; var Info: TIntgrlElmntInfo): TinlID;
begin

end;

function TProjectDB.CreateData(infoID: TinlID; dataName: TinlNameType): TinlID;
begin

end;

function TProjectDB.GetData(dataID: TinlID): TIntgrlElmntData;
begin

end;

function TProjectDB.DataByName(dName: TinlNameType; var Data: TIntgrlElmntData
  ): TinlID;
begin

end;

end.

